/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.treepoke.b2c.web.util;


import com.treepoke.b2c.common.dto.UsuarioDTO;
import com.treepoke.b2c.common.enumeration.ListaEnumeration;
import com.treepoke.b2c.web.base.B2CTPBaseJSFBean;
import com.treepoke.util.dto.AuditoriaDTO;
import com.treepoke.util.dto.ParametroVacioDTO;
import com.treepoke.util.enumeration.UtilEnumeration;
import com.treepoke.util.exception.BusinessException;
import com.treepoke.util.wsclient.RegistroAuditoriaWSClient;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

/**
 *
 * @author dvega
 */
@ManagedBean(name = "pageControllerJSFBean")
@ViewScoped
public class PageControllerJSFBean extends B2CTPBaseJSFBean {

    private static final long serialVersionUID = 1L;
    private RegistroAuditoriaWSClient client = new RegistroAuditoriaWSClient();
    private String usuario;
    private int timeOut;

    @PostConstruct
    public void init() {      
       construirUsuario();
    }

    public String processInicio() {
        return "inicio";
    }

    public String processSeleccionEntrega() {
        return "seleccionEntrega";
    }
    
    public String processFamiliasTarifas() {
        return "/pages/familias/familias";
    }

    public String processGeneracionCargos() {
        return "generacionCargos";
    }
    
    public String processGeneracionAbonos() {
        return "generacionAbonos";
    }


    public String processConsultarOperaciones() {
        return "consultarOperaciones";
    }

    public String processOperacionesCumplidas() {
        return "operacionesCumplidas";
    }
    
    public String processOperacionesRechazadas() {
        return "operacionesRechazadas";
    }
    
    public String processErrorEntrega() {
        return "errorEnEntrega";
    }

    public String getUsuario() {
        return usuario;
    }

    public void setUsuario(String usuario) {
        this.usuario = usuario;
    }

    public int getTimeOut() {
        return timeOut;
    }

    public void setTimeOut(int timeOut) {
        this.timeOut = timeOut;
    }   
        
    public void construirUsuario() {
        
        UsuarioDTO usuarioDTO = (UsuarioDTO) getSessionAttribute("usuario");
        try {
            if (usuarioDTO == null) {
                logger.infoMessage("construyendo usuario");
                HttpSession session = (HttpSession) getContext().getExternalContext().getSession(true);
                HttpServletRequest request = (HttpServletRequest) getContext().getExternalContext().getRequest();
                if (request.getRemoteUser() != null) {
                    UsuarioDTO usuarioTemp = new UsuarioDTO();
                    usuarioTemp.setNombreUsuario(request.getRemoteUser());
                    usuarioTemp.setIpUsuario(request.getRemoteAddr());
                    usuarioTemp.setTiempoSession(session.getMaxInactiveInterval() * 1000);
                    setSessionAttribute("usuario", usuarioTemp);
                    AuditoriaDTO log = construirAuditoriaDTO(UtilEnumeration.CODIGO_FINALIZAR_SESION,
                            ListaEnumeration.DescripcionesAuditoria.INICIALIZAR_SESION.getDescripcion() + " " + request.getRemoteUser());
                    client.registrarLog(log);
                    usuario = request.getRemoteUser();
                    timeOut = session.getMaxInactiveInterval() * 1000;
                } else {
                    timeOut = session.getMaxInactiveInterval() * 1000;
                }
            } else {
                logger.infoMessage("usuario ya construido");
                usuario = usuarioDTO.getNombreUsuario();
                timeOut = usuarioDTO.getTiempoSession();
            }
        } catch (BusinessException ex) {
            logger.errorMessage("Error guardando auditoria", ex);

        } 
    }    

    public void cerrarSesion() {
        
        try {
            logger.infoMessage("finalizando sesion");
            HttpSession session = (HttpSession) getContext().getExternalContext().getSession(false); 
            AuditoriaDTO log = construirAuditoriaDTO(UtilEnumeration.CODIGO_FINALIZAR_SESION,
                    ListaEnumeration.DescripcionesAuditoria.FINALIZAR_SESION.getDescripcion()+" "+ getUsuario());
            client.registrarLog(log);
            session.invalidate();            
        } catch (BusinessException ex) {
            logger.errorMessage("Error guardando auditoria", ex);

        } 
    }   
  
}
